﻿using System;
using Entidades.Attributes;

namespace Entidades
{
    [Serializable]
    [EntityInfo(Cacheable = true)]
    public class Usuario : Entidad
    {
        #region Constructores

        /// <summary>
        /// Default constructor
        /// </summary>
        public Usuario()
        {
        }

        #endregion

        #region Entidad Inherited Members & Methods
        public override string Descriptor
        {
            get
            {
                //return base.Descriptor;
                var fullName = String.Empty;
                var hasFirstName    = !String.IsNullOrEmpty(this.Nombre.Trim());
                var hasLastName     = !String.IsNullOrEmpty(this.Apellido.Trim());
                if ( hasFirstName && hasLastName )
                    fullName = String.Format("{0}, {1}", this.Apellido, this.Nombre);
                if (hasFirstName && !hasLastName)
                    fullName = this.Nombre;
                if (!hasFirstName && hasLastName)
                    fullName = this.Apellido;
                return fullName;
            }
            //set
            //{
            //    base.Descriptor = value;
            //}
        }
        #endregion

        #region Propiedades

        /// <summary>
        /// Nombre de Usuario
        /// </summary>
        public virtual string NombreUsuario { get; set; }

        /// <summary>
        /// Password
        /// </summary>
        public virtual string Password { get; set; }

        /// <summary>
        /// Tipo de Usuario
        /// </summary>
        public virtual UsuarioTipo Tipo { get; set; }

        /// <summary>
        /// Tipo de Documento
        /// </summary>
        public virtual TipoDocumento TipoDocumento { get; set; }
        
        /// <summary>
        /// Categoría de Usuario
        /// </summary>
        public virtual UsuarioCategoria Categoria { get; set; }

        /// <summary>
        /// Apellido
        /// </summary>
        public virtual string Apellido { get; set; }

        /// <summary>
        /// Telefono
        /// </summary>
        public virtual string Telefono { get; set; }

        /// <summary>
        /// Celular
        /// </summary>
        public virtual string Celular { get; set; }

        /// <summary>
        /// Email
        /// </summary>
        public virtual string Email { get; set; }

        /// <summary>
        /// Nro. Documento
        /// </summary>
        public virtual string NroDocumento { get; set; }

        /// <summary>
        /// CUIT
        /// </summary>
        public virtual string CUIT { get; set; }

        /// <summary>
        /// Banco
        /// </summary>
        public virtual string Banco { get; set; }

        /// <summary>
        /// Foto
        /// </summary>
        public virtual byte[] Foto { get; set; }

        /// <summary>
        /// Número de Matrícula
        /// </summary>
        public virtual string NroMatricula { get; set; }

        #endregion

        #region Public Methods

        public virtual string MostrarNombreCompleto()
        {
            return string.Format("{0}, {1}", this.Apellido, this.Nombre);
        }

        #endregion
    }
}
